# import pandas as pd
# pd.set_option('display.unicode.east_asian_width',True)
# df = pd.DataFrame([2,5,5,5,10,3,4,12,7,10],columns=['原始数据'])
# df['顺序排名']=df['原始数据'].rank(method='first')
# df['最大值排名']=df['原始数据'].rank(method='max')
# df['最小值排名']=df['原始数据'].rank(method='min')
# df['平均值排名']=df['原始数据'].rank(method='average')
# print(df)



# import pandas as pd
# pd.set_option('display.unicode.east_asian_width',True)
# df = pd.read_excel('学生成绩表.xlsx')
# df['总成绩']=df.groupby({'语文':'总成绩','数学':'总成绩','英语':'总成绩','综合':'总成绩'},axis=1).agg('sum')
# df['排名']=df['总成绩'].rank(method='min',ascending=False)
# df.sort_values('排名',inplace=True,ignore_index=True)
# df1 = pd.DataFrame()
# groups = df.groupby('排名')
# for group in groups:
#     df2= pd.DataFrame(group[1])
#     df2.sort_values('语文',ascending=False,inplace=True)
#     df1 =pd.concat([df1,df2])
# df1 = df1.reset_index(drop=True)
# print(df1)


'''
索引（混乱）	姓名	语文	总成绩	排名
2	李四	115	330	1
3	赵六	115	330	1
0	张三	110	330	1
1	王五	105	325	4
这种索引毫无意义，还会影响后续对数据的定位（比如按索引取行时容易出错）。
二、代码参数拆解
python
运行
df1 = df1.reset_index(drop=True)
reset_index()：pandas 的内置方法，作用是 “重置索引”，默认会把原来的索引变成一列新数据，再生成新索引。
drop=True：关键参数！表示 “删除原来的旧索引”，不把它保留为新列（如果不加 drop=True，会多一列叫 index 的旧索引数据，反而冗余）。
三、执行后的效果
执行后，无论 df1 原来的索引多混乱，都会被彻底清除，重新生成连续的整数索引（0、1、2、3...），最终结果如下：
索引（新）	姓名	语文	总成绩	排名
0	李四	115	330	1
1	赵六	115	330	1
2	张三	110	330	1
3	王五	105	325	4
四、补充说明
什么时候必须用？只要数据经过「拼接（concat）、分组（groupby）、排序（sort_values）、过滤（drop）」等操作，导致原始索引混乱时，都建议用 reset_index(drop=True) 重置，避免后续操作出错。
如果不加 drop=True 会怎样？会保留旧索引作为新列（列名默认是 index），比如：
index（旧索引）	姓名	语文	总成绩	排名
2	李四	115	330	1
3	赵六	115	330	1
0	张三	110	330	1
1	王五	105	325	4
这种情况通常不需要，所以 drop=True 是必备参数。

'''







# import pandas as pd
# pd.set_option('display.unicode.east_asian_width',True)
# df = pd.read_excel('学生成绩表.xlsx')
# df['总成绩'] = df.sum(axis=1,numeric_only=True)
# df['平均成绩'] = df[['语文','数学','英语','综合']].mean(axis=1,numeric_only=True)
# print(df)
# print(df.describe())




import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
df = pd.DataFrame([['A','C','B'],['B','A','C'],['A','B','C'],['A','B','C']],columns=['a','b','c',])
print('原始数据"\n',df)
print('按频数降序统计a列:"\n',df.value_counts('a'))
print('按频数升序统计b列:"\n',df.value_counts('b',normalize=True,ascending=True))
print('按频数降序统计所有列:"\n',df.value_counts())
print('使用describe()函数统计所有列:"\n',df.describe())